/*
 * SEGUNDA ENTREGA DEL PROYECTO DE BASES DE DATOS "BIBLIOTECA DIGITAL"
 * 
 * Integrantes:
 * Gamboa Edwin Ricardo Cód: 0926631 plan: 2711
 * Portilla Cortes Maria Cristina Cód: 0844113 plan: 3743 
 * Rosero Rosero Luis Alberto Cód: 0943740 plan:3743
 * 
 */
package accesoDatos;
import java.sql.*;
import logica.*;
import java.util.*;

/**
 *
 * @author Gamboa Family
 */
public class DaoAreaConocimiento {
    
   FachadaBD fachada;

    public DaoAreaConocimiento(){
        fachada= new FachadaBD();
    }
    
    public void activarArea (String codigo){
        String actualizacion;
        
        actualizacion = "UPDATE area_conocimiento SET estado_area = '0' "
                + "WHERE codigo_area = \'"+ codigo + "\'";
        ejecutarUpdate(actualizacion);
        System.out.println(actualizacion);
    }

    public void guardarArea(AreaConocimiento are){
        String sql_guardar;
        sql_guardar="INSERT INTO area_conocimiento(codigo_area, nombre_area,"
                + "descripcion_area, estado_area) "
                + "VALUES ('" +
                are.getCodigo() + "', '" + are.getNombre() + "', '" +
                are.getDescripcion() + "', '" + are.getEstado() + "')";
        ejecutarUpdate(sql_guardar);                
    }//fin guardar
    
    public void guardarSubAreaAgregada(String cod_area, String cod_subAre){
        String sql_guardar;
        sql_guardar="INSERT INTO area_subarea(codigo_area, codigo_subarea) "
                + "VALUES ('" +
                cod_area + "', '" + cod_subAre + "')";
        ejecutarUpdate(sql_guardar);                
    }
    
    public int ejecutarUpdate(String insert){
        try{
            Connection conn= fachada.conectar();
            Statement sentencia = conn.createStatement();
            int numFilas = sentencia.executeUpdate(insert);
            conn.close();
            return numFilas;
        }
        catch(SQLException e){ System.out.println(e); }
        catch(Exception e){ System.out.println(e); }
        return -1;
    }

    public Vector consultarAreaPorNombre(String nombre){
        Vector v = new Vector();        
        String sql_select;
        sql_select="SELECT codigo_area, nombre_area, descripcion_area " +
                "FROM area_conocimiento WHERE nombre_area like '%" + nombre + "%'";
         try{
            Connection conn= fachada.conectar();
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);
            //
            while(tabla.next()){
               Vector v2 = new Vector();
               v2.add(tabla.getString(1));
               v2.add(tabla.getString(2));
               v2.add(tabla.getString(3));
               v.add(v2);
            }            
            conn.close();            
            System.out.println("Conexion cerrada");
            return v;
         }
         catch(SQLException e){ System.out.println(e); }
         catch(Exception e){ System.out.println(e); }
         return null;        
    }
    
        
    public Vector consultarAreaPorCodigo(String codigo){
        Vector v = new Vector();
        String sql_select;
        sql_select="SELECT codigo_area, nombre_area, descripcion_area " +
                "FROM area_conocimiento WHERE codigo_area '" + codigo +"'";
         try{
            Connection conn= fachada.conectar();
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);
            while(tabla.next()){
               Vector v2 = new Vector();
               v2.add(tabla.getString(1));
               v2.add(tabla.getString(2));
               v2.add(tabla.getString(3));
               v.add(v2);
            }            
            conn.close();            
            System.out.println("Conexion cerrada");
            return v;
         }
         catch(SQLException e){ System.out.println(e); }
         catch(Exception e){ System.out.println(e); }
         return null;        
    }
    
    public Vector consultarTodasLasAreas(){
        Vector v = new Vector();
        String sql_select;
        sql_select="SELECT codigo_area, nombre_area, descripcion_area " +
                "FROM area_conocimiento";
         try{
            Connection conn= fachada.conectar();
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);
            while(tabla.next()){
               Vector v2 = new Vector();
               v2.add(tabla.getString(1));
               v2.add(tabla.getString(2));
               v2.add(tabla.getString(3));
               v.add(v2);
            }            
            conn.close();            
            System.out.println("Conexion cerrada");
            return v;
         }
         catch(SQLException e){ System.out.println(e); }
         catch(Exception e){ System.out.println(e); }
         return null;
    }
    
    public AreaConocimiento retornarAreaPorCodigo(String codigo){
        AreaConocimiento a = new AreaConocimiento();
        String sql_select;
        sql_select="SELECT codigo_area, nombre_area, descripcion_area " +
                "FROM area_conocimiento WHERE codigo_area = '" + codigo +"'";        
        try{
            Connection conn= fachada.conectar();
            System.out.println("consultando en la bd");
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);
            
            while(tabla.next()){
                a.setCodigo(tabla.getString(1));
                a.setNombre(tabla.getString(2));
                a.setDescripcion(tabla.getString(3)); 
                System.out.println("Area Ok");
            }
            conn.close();
            //a.setSubareas(retornarSubareas(codigo));
            return a;
         }
         catch(SQLException e){ System.out.println(e); }
         catch(Exception e){ System.out.println(e); }
        return null;
    }
    
    public Vector retornarSubareas (String cod_area){
        Vector subAreas = new Vector();
        String sql_select;
        sql_select="SELECT codigo_subarea " + "FROM area_subarea "
                + "WHERE codigo_area = '" + cod_area + "'";        
        try{
            Connection conn= fachada.conectar();
            System.out.println("consultando en la bd");
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);
            
            while(tabla.next()){
                subAreas.add(retornarAreaPorCodigo(tabla.getString(1)));
                System.out.println("SubArea Ok");
            }
            conn.close();
            return subAreas;
         }
         catch(SQLException e){ System.out.println(e); }
         catch(Exception e){ System.out.println(e); }
        return null;
    }
    
    public void modificarArea (int caso, String cod_area, String valor){
        String actualizacion;
        switch(caso){
            case 1:
                actualizacion = "UPDATE area_conocimiento SET nombre_area = \'" + valor + "\' "
                + "WHERE codigo_area = \'"+ cod_area + "\'";
                ejecutarUpdate(actualizacion);
                break;
            case 2:
                actualizacion = "UPDATE area_conocimiento SET decripcion_area = \'" + valor + "\' "
                + "WHERE codigo_area = \'"+ cod_area + "\'";
                ejecutarUpdate(actualizacion);
                break;
        }
    }
        
    public void quitarSubArea(String cod_area, String cod_subArea){
        String borrado;
        borrado = "DELETE FROM area_subarea WHERE codigo_area = '" + cod_area +
                "' AND codigo_subarea = '" + cod_subArea +"'";
        ejecutarUpdate(borrado);
    }
    
    public boolean existeCodigo(String codigo){
        String sql_select, aux="";
        sql_select="SELECT codigo_area FROM area_conocimiento "
                + "WHERE codigo_area =\'" + codigo+ "\'";
        
        try{
            Connection conn= fachada.conectar();
            System.out.println("consultando en la bd");
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);
            
            while(tabla.next()){
                aux=tabla.getString(1);
                System.out.println(aux);
            }
            conn.close();            
         }
        catch(SQLException e){ System.out.println(e); }
        catch(Exception e){ System.out.println(e); }
        if(aux.equals(codigo))
            return true;
        else 
            return false;
    }
    
    public boolean tieneSubArea(String area, String subArea){
        String sql_select, aux="";
        sql_select="SELECT codigo_subarea FROM area_subarea "
                + "WHERE codigo_area =\'" + area+ "\' AND codigo_subarea =\'" + subArea+ "\'";
        
        try{
            Connection conn= fachada.conectar();
            System.out.println("consultando en la bd");
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);
            
            while(tabla.next()){
                aux=tabla.getString(1);
                System.out.println(aux);
            }
            conn.close();            
         }
        catch(SQLException e){ System.out.println(e); }
        catch(Exception e){ System.out.println(e); }
        if(aux.equals(subArea))
            return true;
        else 
            return false;
    } 
    
    public void desactivarArea (String codigo){
        String actualizacion;
        
        actualizacion = "UPDATE area_conocimiento SET estado_area = '1' "
                + "WHERE codigo_area = \'"+ codigo + "\'";
        ejecutarUpdate(actualizacion);
        System.out.println(actualizacion);
    }
    
    public Vector listarAreas(){
        Vector v = new Vector();
        AreaConocimiento a = new AreaConocimiento();
        String sql_select;
        sql_select="SELECT codigo_area FROM area_conocimiento ";
        
        try{
            Connection conn= fachada.conectar();
            System.out.println("consultando en la bd");
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);
            
            while(tabla.next()){
                a = retornarAreaPorCodigo(tabla.getString(1));
                v.add(a);                               
                }
            conn.close();
            System.out.println("Listado Areas Ok");
            return v;
         }
        catch(SQLException e){ System.out.println(e); }
        catch(Exception e){ System.out.println(e); }
        return null;        
    } 
    
    public boolean esActivada(String cod_area){
        String sql_select, estado="";
        boolean respuesta = true;
        sql_select="SELECT estado_area FROM area_conocimiento "
                + "WHERE codigo_area = '" + cod_area + "'";
        
        try{
            Connection conn= fachada.conectar();
            System.out.println("consultando en la bd");
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);
            
            while(tabla.next()){
                estado = tabla.getString(1);           
            }
            if(estado.equals("1"))
                respuesta = false;
            
            conn.close();
            System.out.println("Consulta de si esta Activado Area Ok");           
         }
        catch(SQLException e){ System.out.println(e); }
        catch(Exception e){ System.out.println(e); }
        return respuesta; 
    }
    
     public Vector listarSubareas (String cod_area){
        Vector areas = new Vector();
        DaoAreaConocimiento daoArea = new DaoAreaConocimiento();
        String sql_select;
        sql_select="SELECT codigo_subarea " + "FROM area_subarea "
                + "WHERE codigo_area = '" + cod_area +"'";        
        try{
            Connection conn= fachada.conectar();
            System.out.println("consultando en la bd");
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);
            
            while(tabla.next()){
                areas.add(daoArea.retornarAreaPorCodigo(tabla.getString(1)));
                System.out.println("SubAreas de Area Ok");
            }
            conn.close();
            return areas;
         }
         catch(SQLException e){ System.out.println(e); }
         catch(Exception e){ System.out.println(e); }
        return null;
    }
}// Fin Clase